import cv2
import mediapipe as mp
import tools
import data
import distinguish
import WriteRead

def run(Name,Path):
    """
    会议控制系统启动函数
    Name:方案名
    Path:方案路径
    """
    """先读取当前方案数据,修改data.py"""
    WriteRead.Read_TXT(Name,Path)

    cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)  # 0代表自己电脑的摄像头
    cap.set(3, data.wCam)  # 设置显示框的宽度1280
    cap.set(4, data.hCam)  # 设置显示框的高度720

    mpHands = mp.solutions.hands
    hands = mpHands.Hands()  # 手
    mpDraw = mp.solutions.drawing_utils

    time = 1
    while True:
        ret, img = cap.read()  # 一次循环截一张图

        # 翻转图像，使自身和摄像头中的自己呈镜像关系
        img = cv2.flip(img, flipCode=1)  # 1代表水平翻转，0代表竖直翻转

        # 在图像窗口上创建一个矩形框，在该区域内移动鼠标
        cv2.rectangle(img, data.pt1, data.pt2, (0, 255, 255), 5)

        if ret:
            imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # imgRGB是一张图片，cv拿到的图是bgr的，转成rgb

            result = hands.process(imgRGB)  # 把这个图片给hands对象处理,result是侦测出来的手
            # print(result.multi_hand_landmarks)#提取手部21个点的坐标

            if result.multi_hand_landmarks:
                """这里拿到了手部坐标"""
                hds_lm = tools.get_landmark(result.multi_hand_landmarks)  # 获取双手所有坐标放入hds_lm
                if len(hds_lm[0]) >= 21:  # 手部不全不算
                    # distinguish.mouse_1shot(hds_lm)
                    #distinguish.WaterColor_Pen_1shot(hds_lm)
                    distinguish.gesture(hds_lm)

                    for handLms in result.multi_hand_landmarks:  # handLms是一只手的21点
                        mpDraw.draw_landmarks(img, handLms,
                                              connections=mpHands.HAND_CONNECTIONS)  # img:画在img这个图片上，handLms：要画的点

            cv2.imshow('img', img)
            if cv2.waitKey(1) & 0xFF == 27:  # 每帧滞留20毫秒后消失，ESC键退出?
                break
        time += 1

        if cv2.waitKey(1) == ord('q'):  # 按q结束摄像头
            cap.release()
            cv2.destroyAllWindows()
            break

#run("PLAN1","F:\\project\\Gesture_rec\\PPT_PLAN\\")
